`timescale 1ns / 1ps

////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:   13:44:58 06/16/2015
// Design Name:   ALUControl
// Module Name:   D:/Libraries/Documents/Ingenieria en computacion/Arquitectura Computadoras/TrabajoFinalArquitectura/trunk/Final-Mips/ALUControlTest.v
// Project Name:  Final-Mips
// Target Device:  
// Tool versions:  
// Description: 
//
// Verilog Test Fixture created by ISE for module: ALUControl
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////

module ALUControlTest;

	// Inputs
	reg [1:0] ALUOp;
	reg [5:0] funct;
	reg [4:0] SAIn;
	reg [2:0] InmCtrl;
	// Outputs
	wire [5:0] OutALUCtrl;
	wire [4:0] SAOut;

	// Instantiate the Unit Under Test (UUT)
	ALUControl uut (
		.ALUOp(ALUOp), 
		.funct(funct), 
		.OutALUCtrl(OutALUCtrl),
		.SAIn(SAIn),
		.SAOut(SAOut),
		.InmCtrl(InmCtrl)
	);

	initial begin
		// Initialize Inputs
		ALUOp = 0;
		funct = 0;
		SAIn = 3;
		InmCtrl = 3'b 000;
		// Wait 100 ns for global reset to finish
		#100;
		// Add stimulus here
		// Si la entrada es 00 o 01, no importa lo que haya en funct
		funct = 6'b 101011;
		//Aca la salida deberia ser 100000
		//Es la suma para los loads y stores
		#100;
		ALUOp = 2'b 01;
		//Aca la salida deberia ser 100010
		//Es la resta para los branchs
		#100;
		//Si cambias el funct, no pasa nada en la salida
		funct = 6'b 000000;
		#50;
		//Solo cuando lo activas a 10
		ALUOp = 2'b 10;
		#50;
		funct = 6'b 000011;
		#50;
		funct = 6'b 100011;
		#100;
		//Probamos las operaciones con inmediatos
		ALUOp = 2'b 11;
		#80;
		InmCtrl = 3'b 110; //xor
		#80;
		InmCtrl = 3'b 111; //LOAD UPPER INMEDIATE
		//Y dsp podes volver
		#100;
		ALUOp = 2'b 00;
		#100;
		ALUOp = 2'b xx;
	end
      
endmodule

